package com.company.ljh.easy;

/**
 * 733.有一幅以 m x n 的二维整数数组表示的图画 image ，其中 image[i][j] 表示该图画的像素值大小。
 *
 * 你也被给予三个整数 sr ,  sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。
 *
 * 为了完成 上色工作 ，从初始像素开始，记录初始坐标的 上下左右四个方向上 像素值与初始坐标相同的相连像素点，接着再记录这四个方向上符合条件的像素点与他们对应 四个方向上 像素值与初始坐标相同的相连像素点，……，重复该过程。将所有有记录的像素点的颜色值改为 newColor 。
 *
 * 最后返回 经过上色渲染后的图像 。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/flood-fill
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 图像渲染 {
    /**
     * 广度优先遍历，但要注意该的颜色和当前颜色相等时，数组不需要修改，直接return
     * @param image
     * @param sr
     * @param sc
     * @param newColor
     * @return
     */
    public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
        int temp = image[sr][sc];
        //不用改
        if(temp == newColor){
            return image;
        }
        image[sr][sc] = newColor;
        if(sr != 0 ){
            if(temp== image[sr-1][sc])
                floodFill(image,sr-1,sc,newColor);
        }
        if(sr != image.length-1){
            if(temp== image[sr+1][sc])
                floodFill(image,sr+1,sc,newColor);
        }
        if(sc != 0){
            if(temp == image[sr][sc-1])
                floodFill(image,sr,sc-1,newColor);
        }
        if(sc != image[0].length-1){
            if(temp == image[sr][sc+1])
                floodFill(image,sr,sc+1,newColor);
        }

        return image;
    }
}
